perm filename CON748.FAI[PUR,LCS] blob sn#394898 filedate 1979-07-23 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00006 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002		TITLE CON748
C00003 00003	  SETUP INTEL HEX FORMAT
C00005 00004	LOAD:	PUSHJ P,INP
C00007 00005	DONE:	HRRZI A,72	RECORD MARK
C00009 00006		XORI S,-1	CK SUM HIGH
C00011 ENDMK
C⊗;
	TITLE CON748
	A←1 ↔B←2↔C←3 ↔D←4 ↔E←5↔X←6↔Y←7
	P←17 ↔ NBUFS←4 ↔ S←10  ↔ L←11
PDL:	BLOCK 22
IBUF:	BLOCK 4
OBUF:	BLOCK 4
FILNAM:	'NTBOX '
	'DMP   '
	0
	0
FIL2:	'ILOAD '
	'PTP   '
	0
	0

STAR:	MOVE P,[PDPO:	IOWD 22,PDL]
	OPEN 11,[14↔'DSK   '↔IBUF]
	JRST 4,.
	INBUF 11,NBUFS
	LOOKUP 11,FILNAM
	JRST 4,.
	OPEN [14↔'DSK   '↔OBUF,,]
	JRST 4,.
	OUTBUF NBUFS
	ENTER FIL2
	JRST 4,.

	SETZ L,
	PUSHJ P,INP+1
	ADDI X,200	;FLUSH GARBAGE
	PUSHJ P,OUTP	

;  SETUP INTEL HEX FORMAT
WHDR:	HRRZI A,72	;RECORD MARK
	HRRZM A,1(Y)
	AOBJN Y,.+2
	PUSHJ P,OUTP

	HRRZI A,"8"	;RECORD LENGTH HIGH (8 = 128 BYTES)
	HRRZI S,200	;START CK SUM
	HRRZM A,1(Y)
	AOBJN Y,.+2
	PUSHJ P,OUTP
	HRRZI A,"0"	;RECORD LENGTH LOW
	HRRZM A,1(Y)
	AOBJN Y,.+2
	PUSHJ P,OUTP

	HRRZI A,(L)	;LOAD ADDRESS HIGH
	LSH A,-14
	ANDI A,17
	HRRZ A,HEXTBL(A)
	HRRZM A,1(Y)
	AOBJN Y,.+2
	PUSHJ P,OUTP

	HRRZI A,(L)
	LSH A,-10
	ADDI S,(A)	;Check sum
	ANDI A,17
	HRRZ A,HEXTBL(A)
	HRRZM A,1(Y)
	AOBJN Y,.+2
	PUSHJ P,OUTP

	HRRZI A,(L)
	LSH A,-4
	ANDI A,17
	HRRZ A,HEXTBL(A)
	HRRZM A,1(Y)
	AOBJN Y,.+2
	PUSHJ P,OUTP

	HRRZI A,(L)	;LOAD ADDRESS LOW
	ADDI S,(A)	;Check sum
	ANDI A,17
	HRRZ A,HEXTBL(A)
	HRRZM A,1(Y)
	AOBJN Y,.+2
	PUSHJ P,OUTP
	
	ADDI L,200

	HRRZI A,"0"	;RECORD TYPE HIGH
	HRRZM A,1(Y)
	AOBJN Y,.+2
	PUSHJ P,OUTP
	HRRZI A,"0"	;RECORD TYPE LOW
	HRRZM A,1(Y)
	AOBJN Y,.+2
	PUSHJ P,OUTP

	HRLI C,-200	;-200 FOR 128 DATA BYTES
LOAD:	PUSHJ P,INP
	HRRZ A,1(X)
	ADDI S,(A)	;Check sum
	LSH A,-4	;GET HIGH NIBBLE
	ANDI A,17
	HRRZ A,HEXTBL(A)
	HRRZM A,1(Y)
	AOBJP Y,OUTZ

LOWNIB:	HRRZ A,1(X)	;GET LOW NIBBLE
	ANDI A,17
	HRRZ A,HEXTBL(A)
	HRRZM A,1(Y)

	AOBJP Y,OUTIT
ADX:	AOBJP C,NXTRCD
	AOBJN X,LOAD+1
	JRST LOAD

OUTIT:	PUSHJ P,OUTP
	JRST ADX
OUTZ:	PUSHJ P,OUTP
	JRST LOWNIB

NXTRCD:	XORI S,-1	;GET CHECK SUM
	AOJ S,
	HRRZI A,(S)
	LSH A,-4
	ANDI A,17
	HRRZ A,HEXTBL(A)
	HRRZM A,1(Y)
	AOBJN Y,.+2
	PUSHJ P,OUTP

	ANDI S,17
	HRRZ A,HEXTBL(S)
	HRRZM A,1(Y)
	AOBJN Y,.+2
	PUSHJ P,OUTP
	CAIE L,2000	;2000 FOR 1024 DATA BYTES
	JRST WHDR
DONE:	HRRZI A,72	;RECORD MARK
	HRRZM A,1(Y)
	AOBJN Y,.+2
	PUSHJ P,OUTP

	HRRZI A,"0"	;RECORD LENGTH HIGH
	SETZ S,		;Check sum
	HRRZM A,1(Y)
	AOBJN Y,.+2
	PUSHJ P,OUTP
	HRRZI A,"0"	;RECORD LENGTH LOW
	HRRZM A,1(Y)
	AOBJN Y,.+2
	PUSHJ P,OUTP

	HRRZI A,(L)	;LOAD ADDRESS HIGH
	LSH A,-14
	ANDI A,17
	HRRZ A,HEXTBL(A)
	HRRZM A,1(Y)
	AOBJN Y,.+2
	PUSHJ P,OUTP

	HRRZI A,(L)
	LSH A,-10
	ADDI S,(A)	;Check sum
	ANDI A,17
	HRRZ A,HEXTBL(A)
	HRRZM A,1(Y)
	AOBJN Y,.+2
	PUSHJ P,OUTP

	HRRZI A,(L)
	ADDI S,(A)	;Check sum
	LSH A,-4
	ANDI A,17
	HRRZ A,HEXTBL(A)
	HRRZM A,1(Y)
	AOBJN Y,.+2
	PUSHJ P,OUTP

	HRRZI A,"0"	;LOAD ADDRESS LOW
	HRRZM A,1(Y)
	AOBJN Y,.+2
	PUSHJ P,OUTP

	HRRZI A,"0"	;RECORD TYPE HIGH
	HRRZM A,1(Y)
	AOBJN Y,.+2
	PUSHJ P,OUTP
	HRRZI A,"1"	;RECORD TYPE LOW
	AOJ S,		;Check sum
	HRRZM A,1(Y)
	AOBJN Y,.+2
	PUSHJ P,OUTP
	XORI S,-1	;CK SUM HIGH
	AOJ S,
	HRRZI A,(S)
	LSH A,-4
	ANDI A,17
	HRRZ A,HEXTBL(A)
	HRRZM A,1(Y)
	AOBJN Y,.+2
	PUSHJ P,OUTP

	ANDI S,17
	HRRZ A,HEXTBL(S)
	HRRZM A,1(Y)
	AOBJN Y,.+2
	PUSHJ P,OUTP
	
	SETZM 1(Y)
	AOBJN Y,.+1
	PUSHJ P,OUTP

	PUSHJ P,OUTP
	RELEAS
	EXIT

INP:	HRRM X,IBUF+1
	IN 11,
	JRST SETX
	STATO 11,20000
	JRST 4,.

ERROR:	OUTSTR [ASCIZ/?????/]
	EXIT

OUTP:	HRRM Y,OBUF+1
	OUT
	CAIA
	JRST 4,.
	HRRZ Y,OBUF+2
	MOVNI Y,(Y)
	HRLZI Y,(Y)
	HRR Y,OBUF+1
	POPJ P,

SETX:	HRRZ X,IBUF+2
	MOVNI X,(X)
	HRLZI X,(X)
	HRR X,IBUF+1
	POPJ P,

HEXTBL:	"0"
	"1"
	"2"
	"3"
	"4"
	"5"
	"6"
	"7"

	"8"
	"9"
	"A"
	"B"
	"C"
	"D"
	"E"
	"F"

END STAR